package com.sweet.page;

import java.util.List;

/**
 * 列表分页
 *
 * @author limi
 * @date 2018/4/22 17:50
 */
public final class PageList {
    private PageList() {
    }

    /**
     * 定义数据库数据起始游标
     *
     * @return
     */
    private static int getStartIndex(Page page) {
        return page.getSize() * (page.getNumber() - 1);
    }

    /**
     * 定义数据库数据结束游标
     *
     * @return
     */
    private static int getEndIndex(Page page) {
        int endIndex = page.getNumber() * page.getSize();
        if (page.getTotalElements() >= endIndex) {
            endIndex -= 1;
        } else {
            endIndex = page.getTotalElements() - 1;
        }
        return endIndex;
    }

    /**
     * 针对数据进行列表分页
     *
     * @param datas    要进行分页的数据
     * @param pageable 分页参数
     * @param <T>
     * @return
     */
    public static <T> Page<T> getPage(List<T> datas, Pageable pageable) {
        //获取列表总数，小于1则不进行分页
        int count = datas == null ? 0 : datas.size();
        Page page = new Page(pageable, count);
        if (count < 1) {
            return page;
        }

        //获取要截取的数据下标
        int startIndex = getStartIndex(page);
        int endIndex = getEndIndex(page);

        //截取数据
        if (startIndex >= 0 && endIndex >= startIndex) {
            page.setContent(datas.subList(startIndex, endIndex + 1));
        }

        return page;
    }
}
